package com.service.order.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayUtil;
import com.service.base.exception.MyException;
import com.service.order.config.PayConfig;
import com.service.order.config.WxPayConfig;
import com.service.order.mapper.PayLogMapper;
import com.service.order.pojo.Order;
import com.service.order.pojo.PayLog;
import com.service.order.service.OrderService;
import com.service.order.service.PayLogService;
import com.service.order.utils.HttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 支付日志表 服务实现类
 * </p>
 *
 * @author testjava
 * @since 2020-10-12
 */
@Service
public class PayLogServiceImpl extends ServiceImpl<PayLogMapper, PayLog> implements PayLogService {

    @Autowired
    private OrderService orderService;

    @Autowired
    private WxPayConfig wxPayConfig;

    @Autowired
    private PayConfig payConfig;


    @Override
    public Map<String, Object> createCode(String orderId) {


        try {
            //1 根据订单号查询订单信息
            QueryWrapper<Order> wrapper = new QueryWrapper<>();
            wrapper.eq("order_no",orderId);
            Order order = orderService.getOne(wrapper);

            //2 使用map设置生成二维码需要参数
            Map m = new HashMap();
            m.put("appid","wx74862e0dfcf69954");
            m.put("mch_id", "1558950191");
            m.put("nonce_str", WXPayUtil.generateNonceStr());
            m.put("body", order.getCourseTitle()); //课程标题
            m.put("out_trade_no", orderId); //订单号
            m.put("sign_type", "MD5");
            m.put("fee_type", "CNY");  //货币
            m.put("total_fee", "0.01");  //单位分

//            m.put("total_fee", order.getTotalFee().multiply(new BigDecimal("100")).longValue()+"");
            m.put("spbill_create_ip", "127.0.0.1");
            m.put("notify_url", "http://guli.shop/api/order/weixinPay/weixinNotify");
            m.put("trade_type", "NATIVE");
            m.put("sign","guli");

            //3 发送httpclient请求，传递参数xml格式，微信支付提供的固定的地址
            HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/orderquery");
            //设置xml格式的参数
//            String s = WXPayUtil.generateSignedXml(m, wxPayConfig.getPartnerkey());
            String s = WXPayUtil.mapToXml(m);
            client.setXmlParam(s);

//            client.setXmlParam(WXPayUtil.generateSignedXml(m,"sdfdsfdsfdsfds"));
            client.setHttps(true);
            //执行post请求发送
            client.post();

            //4 得到发送请求返回结果
            //返回内容，是使用xml格式返回
            String xml = client.getContent();
            System.out.println(xml);

//            把xml格式转换map集合，把map集合返回
            Map<String,String> resultMap = WXPayUtil.xmlToMap(xml);


            //最终返回数据 的封装
            Map map = new HashMap();
            map.put("out_trade_no", orderId);
            map.put("course_id", order.getCourseId());
            map.put("total_fee", order.getTotalFee());
            map.put("result_code", resultMap.get("result_code"));  //返回二维码操作状态码
            map.put("code_url", resultMap.get("code_url"));        //二维码地址


            return map;
        } catch (Exception e) {
            e.printStackTrace();
            throw new MyException(20001, "生成二维码失败");
        }
    }


}
